﻿using System;

namespace WeChatBotSDK.Events
{
    /// <summary>
    /// 提供微信事件的处理逻辑，允许用户通过委托自定义处理。
    /// </summary>
    public static class EventHandlers
    {
        /// <summary>
        /// 处理注入成功事件的委托。默认实现记录注入端口和进程 ID。
        /// </summary>
        public static Action<EventCallback<EventData<InjectionSuccessEventData>>> OnInjectionSuccess { get; set; } = DefaultInjectionSuccessHandler;

        /// <summary>
        /// 处理转账事件的委托。默认实现记录转账金额和备注信息。
        /// </summary>
        public static Action<EventCallback<EventData<TransferEventData>>> OnTransferEvent { get; set; } = DefaultTransferEventHandler;

        /// <summary>
        /// 处理支付事件的委托。默认实现记录支付消息。
        /// </summary>
        public static Action<EventCallback<EventData<PaymentEventData>>> OnPaymentEvent { get; set; } = DefaultPaymentEventHandler;

        /// <summary>
        /// 处理消息事件的委托。默认实现记录好友微信 ID 和消息内容。
        /// </summary>
        public static Action<EventCallback<EventData<WeChatMessageData>>> OnMessage { get; set; } = DefaultMessageHandler;

        /// <summary>
        /// 处理好友请求事件的委托。默认实现记录请求人微信 ID 和验证信息。
        /// </summary>
        public static Action<EventCallback<EventData<FriendRequestData>>> OnFriendRequest { get; set; } = DefaultFriendRequestHandler;

        /// <summary>
        /// 处理账号变动事件的委托。默认实现记录账号昵称。
        /// </summary>
        public static Action<EventCallback<WeChatUserInfoData>> OnAccountChangeEvent { get; set; } = DefaultAccountChangeEventHandler;

        /// <summary>
        /// 默认注入成功事件的处理逻辑。
        /// </summary>
        /// <param name="data">包含注入成功事件的相关数据。</param>
        private static void DefaultInjectionSuccessHandler(EventCallback<EventData<InjectionSuccessEventData>> data)
        {
            Console.WriteLine($"[默认处理] 注入成功，监听端口: {data.Data.Data?.Port}, PID: {data.Data.Data?.PID}");
        }

        /// <summary>
        /// 默认转账事件的处理逻辑。
        /// </summary>
        /// <param name="data">包含转账事件的相关数据。</param>
        private static void DefaultTransferEventHandler(EventCallback<EventData<TransferEventData>> data)
        {
            Console.WriteLine($"[默认处理] 转账事件，金额: {data.Data.Data?.Money}, 转账备注: {data.Data.Data?.Memo}");
        }

        /// <summary>
        /// 默认支付事件的处理逻辑。
        /// </summary>
        /// <param name="data">包含支付事件的相关数据。</param>
        private static void DefaultPaymentEventHandler(EventCallback<EventData<PaymentEventData>> data)
        {
            Console.WriteLine($"[默认处理] 支付事件，消息内容: {data.Data.Data?.Msg}");
        }

        /// <summary>
        /// 默认消息事件的处理逻辑。
        /// </summary>
        /// <param name="data">包含消息事件的相关数据。</param>
        private static void DefaultMessageHandler(EventCallback<EventData<WeChatMessageData>> data)
        {
            Console.WriteLine($"[默认处理] 收到消息，好友 WXID: {data.Data.Data?.FromWxid}, 消息内容: {data.Data.Data?.Msg}");
        }

        /// <summary>
        /// 默认好友请求事件的处理逻辑。
        /// </summary>
        /// <param name="data">包含好友请求事件的相关数据。</param>
        private static void DefaultFriendRequestHandler(EventCallback<EventData<FriendRequestData>> data)
        {
            Console.WriteLine($"[默认处理] 好友请求，微信 ID: {data.Data.Data?.Wxid}, 验证信息: {data.Data.Data?.Content}");
        }

        /// <summary>
        /// 默认账号变动事件的处理逻辑。
        /// </summary>
        /// <param name="data">包含账号变动事件的相关数据。</param>
        private static void DefaultAccountChangeEventHandler(EventCallback<WeChatUserInfoData> data)
        {
            if (data.Data.Type==OnlineStatus.Online)
            {
                Console.WriteLine($"[默认处理] 账号变动事件，用户上线，账号信息: {data.Data?.Wxid}， 端口号: {data.Data?.Port}");
            }
            else
            {
                Console.WriteLine($"[默认处理] 账号变动事件，用户下线，账号信息: {data.Wxid}， 端口号: {data.Data?.Port}");
            }
           
        }
    }
}
